//1658. 将 x 减到 0 的最小操作数
// 思路：正难则反
// 要求是找删除最少的元素实现将x减为0，我们可以转化为数组和sum，sum-x记为target
// 找到数组中连续元素和为target的最长子数组问题

#include <vector>
using namespace std;

class Solution
{
public:
    int minOperations(vector<int>& nums, int x) 
    {
        int sum = 0;
        for(auto e : nums)
            sum += e;
        int target = sum - x;
        if(target < 0) return -1;

        int ret = -1;
        for(int left = 0, right = 0, tmp = 0; right < nums.size(); right++)
        {
            tmp += nums[right];
            while(tmp > target)
                tmp -= nums[left++];
            if(tmp == target)
                ret = max(ret, right - left + 1);
        }
        if(-1 == ret) return -1;
        else return nums.size() - ret;
    }
};